#include <iostream>
#include <cstring>

using namespace std;

int a[5000010][10];
int ans = 0;

// 递归函数，用于生成所有可能的配料组合
void dfs(int b[], int s, int k) {
    if(s == 10) {
        if(k == 0) {
            for(int i=0; i<10; i++) {
                a[ans][i] = b[i];
            }
            ans++;
        }
        return;
    }
    for(int i=1; i<=3; i++) {
        if(k - i >= 0) {
            b[s] = i;
            dfs(b, s+1, k-i);
        }
    }
}

int main() {
    int n;
    int b[10];
    memset(b, 0, sizeof(b));
    cin >> n;
    dfs(b, 0, n);
    cout << ans << endl;
    // 按字典序输出所有方案
    for(int i=0; i<ans; i++) {
        for(int j=0; j<10; j++) {
            cout << a[i][j];
            if(j < 9) cout << " ";
        }
        cout << endl;
    }
    return 0;
}